<?php


require_once 'classes/GroupeToPermission.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des GroupeToPermission
 * 
 * @author Manixab Billy
 */

class SCgroupetopermission {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajouter un groupe à une permission
     * @param type $unGroupe un Groupe
     * @param type $unePermission un Permission
     * @return Message
     */
    public function ajouter($unGroupe, $unePermission) {
        try {
            $query = $this->db->prepare("INSERT INTO groupetopermission ".
                    "(groupe_nom, permission_nom) VALUES (:groupe_nom, :permission_nom)");
            
            $query->execute(array(
               'groupe_nom'         =>$unGroupe->getNom(),
               'permission_nom'     =>$unePermission->getNom()
            ));

            $query->closeCursor();
        }
        catch(PDOException $e) {
            return new Message("Permission du groupe non ajoutée: ".$e->getMessage());
        }
        return $unGroupe;
    }
    
     /**
     * Modifier la permission du groupe
     * @param type $unGroupe un Groupe
     * @param type $unePermission un Permission
     * @return Message
     */
    public function modifier($unGroupe, $unePermission) {
        /*try {
            $query = "UPDATE groupetopermission SET
                permission_nom = '".$unePermission."'
                    WHERE groupe_nom ='".$unGroupe."';";
            $this->db->query($query);
            $message = new Message("Permission du groupe modifiée");
        }
        catch(PDOException $e) {
            print($e->getMessage());
            $message = new Message("Permission du groupe non modifiée: ".$e->getMessage());
        }
        return $message;*/
    }
    
     /**
     * Supprimer un compte a un groupe
     * @param type $unGroupe un Groupe
     * @param type $unePermission un Permission
     * @return Message
     */
    public function supprimer($unGroupe, $unePermission) {
        try {
           $query = "DELETE from groupetopermission WHERE (groupe_nom = '".$unGroupe."'
                AND permission_nom = '".$unePermission."');";
                
            $this->db->exec($query);
            $message = new Message("Permission du groupe supprimé");
        }
        catch(PDOException $e) {
            $message = new Message("Permission du groupe non supprimé: ".$e->getMessage());
        }
        return $message;
    }
    
     /**
     * @param $unGroupeToPermission GroupeToPermission de recherche sous forme d'objet GroupeToPermission
     * @return un tableau d'objet GroupeToPermission
     */
    public function lister($unGroupeToPermission) {
        try {
            $query = "SELECT * FROM groupetopermission ";
            
            if ($unGroupeToPermission != null) {
                
                if (($unGroupeToPermission->getGroupe_nom() != null) || ($unGroupeToPermission->getPermission_nom() != null)){
                    $query_where = "WHERE";
                    
                    if ($unGroupeToPermission->getGroupe_nom() != NULL) {
                        $query_where .= " groupe_nom = '".$unGroupeToPermission->getGroupe_nom()."'";
                        
                        if ($unGroupeToPermission->getPermission_nom() != NULL) {
                            $query_where .= " AND permission_nom = '".$unGroupeToPermission->getPermission_nom()."'";
                        }
                    }
                    else {
                        if ($unGroupeToPermission->getPermission_nom() != NULL) {
                            $query_where .= " permission_nom = '".$unGroupeToPermission->getPermission_nom()."'";
                        }
                    }
                    $query .= $query_where;
                }
            }
            
            $lesGroupeToPermissionTrouves = null;
            $unGroupeToPermissionLu = null;
            $result = $this->db->query($query);
            while($row=$result->fetch()) {
                $unGroupeToPermissionLu = new GroupeToPermission($row["groupe_nom"], $row["permission_nom"]);
                $lesGroupeToPermissionTrouves[] = $unGroupeToPermissionLu;
            }
        }
        catch(PDOException $e) {
            print($e->getMessage());
            $message = new Message("Permission du groupe non listée: ".$e->getMessage());
        }
        return $lesGroupeToPermissionTrouves;
    }
}
?>
